
// step 1# 将所有非零元素移到数组前面，同时将零移到末尾，保持相对顺序
void moveZeroes(int* nums, int numsSize) {
    int left = 0; // 指向下一个应放置非零元素的位置

    // step 2# 使用 right 指针遍历整个数组
    for (int right = 0; right < numsSize; right++) {
        if (nums[right] != 0) {
            // step 2.1# 交换当前非零元素到左边，和 left 指向的位置互换
            int temp = nums[left];          // 保存 nums[left] 的值（通常是 0）
            nums[left] = nums[right];       // 将非零值放到前面
            nums[right] = temp;             // 把原来 left 的值放到当前位置（可能是自己）

            left++; // step 2.2# 移动左指针，准备放下一个非零元素
        }
    }
}
